package com.zsy.springframework.beans.factory.beanfactory;

import com.zsy.springframework.BeansException;
import com.zsy.springframework.beans.factory.config.BeanDefinition;

//AbstractAutowireCapableBeanFactorytAutowireCapableBeanFactory：综合AbstractBeanFactory并对接口Autowire Capable BeanFactory进行实现。
//这个抽象类，只能实现创建bean的方法，但是获取beandefinition zheli bu能实现 继续交给子类实现
public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory {
    @Override
    protected Object createBean(String beanName, BeanDefinition beanDefinition) throws BeansException {
        Object bean;
        try {
            bean = beanDefinition.getBeanClass().newInstance();
            //这个地方通过反射来获取这个对象的实例
            //获取class的三种方法 class.forname \ getclass \ xxx.class
            //创建这个对象实例两种方法： newinstance 、拿到构造器 getconstructor
            //接着就开始进行方法属性之类的改造了
        } catch (InstantiationException | IllegalAccessException e) {
            throw new BeansException("Instantiation of bean failed", e);
        }
        //创建成功后，需要添加到某个地方
        //通过父类继承了SingletonBeanRegistry 这个接口，所以可以直接添加到单例的bean池当中
        addSingleton(beanName, bean);
        return bean;
    }
}
